package com.ybwh.springboot2.seq.service;

import com.ybwh.springboot2.seq.utils.Snowflake;
import com.ybwh.springboot2.util.RandomUtil;
import org.springframework.lang.Nullable;

import java.util.Map;

/**
 * <p>
 * 业务序列号信息服务接口
 * </p>
 *
 * @author youbeiwuhuan
 * @version V1.0
 * @since 2023-06-07 11:50:26
 */
public interface SeqNoService {

    Snowflake snowflake = new Snowflake(RandomUtil.randomLong(32), RandomUtil.randomLong(32));

    /**
     * 获取雪花算法ID
     *
     * @return
     */
    default Long getSnowflakeId() {
        return snowflake.nextId();
    }


    /**
     * 获取业务编号,编号由 前缀+序列号 组成,前缀是序列号的唯一标识。
     * 前缀可带参数,双花括号包裹，如:SEQ-{date}-
     *
     * @param preffix      业务编号前缀
     * @param seqLen       序列号长度
     * @param preffixPrarm 参数
     * @return
     */
    String getBusiNo(String preffix, int seqLen, @Nullable Map<String, String> preffixPrarm);

}
